์๋ฐ์คํฌ๋ฆฝํธ ์๋น์ค ์์ปค์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ์ ์๊ด์์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ ๊ฒฝํ์ ์ ๊ณตํ๋ ์์ ์ ์ธ ์คํ๋ผ์ธ ์ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ์๋น์ค ์์ปค: ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์คํ๋ผ์ธ ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ
์ค๋๋ ๊ณผ ๊ฐ์ด ๋ชจ๋ ๊ฒ์ด ์ฐ๊ฒฐ๋ ์ธ์์์ ์ฌ์ฉ์๋ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น ๋ฅด๊ณ , ์์ ์ ์ด๋ฉฐ, ๋งค๋ ฅ์ ์ด๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ํ์ง๋ง ํนํ ์ธํฐ๋ท ์ ์์ด ์ ํ์ ์ด๊ฑฐ๋ ๋ถ์์ ํ ์ง์ญ์์๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์์ธก ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์๋น์ค ์์ปค(Service Workers)๊ฐ ํด๊ฒฐ์ฌ๋ก ๋์ญ๋๋ค. ์๋น์ค ์์ปค๋ ๊ฐ๋ฐ์๋ค์ด ์คํ๋ผ์ธ ์ฐ์ (offline-first) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋์๋ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ๋ ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ ์ ๋๋ค.
์๋น์ค ์์ปค๋ ๋ฌด์์ธ๊ฐ์?
์๋น์ค ์์ปค๋ ๋ฉ์ธ ๋ธ๋ผ์ฐ์ ์ค๋ ๋์ ๋ถ๋ฆฌ๋์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋๋ค. ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ธ๋ผ์ฐ์ , ๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ ์ฌ์ด์์ ํ๋ก์ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋น์ค ์์ปค๋ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ๋ฆฌ์์ค๋ฅผ ์บ์ํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์๋น์ค ์์ปค๋ฅผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ธ ๋น์๋ผ๊ณ ์๊ฐํด๋ณด์ธ์. ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์์ธกํ๊ณ ๊ทธ๋ค์ด ํ์๋ก ํ ๋งํ ๋ฆฌ์์ค๋ฅผ ์ ์ ์ ์ผ๋ก ๊ฐ์ ธ์ ์ ์ฅํจ์ผ๋ก์จ, ๋คํธ์ํฌ ์ํ์ ๊ด๊ณ์์ด ์ฆ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์๋น์ค ์์ปค ์ฌ์ฉ์ ์ฃผ์ ์ด์
- ์คํ๋ผ์ธ ๊ธฐ๋ฅ: ๊ฐ์ฅ ์ค์ํ ์ด์ ์ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ๊ธฐ๋ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋คํธ์ํฌ ์์ ๋ฒ์๊ฐ ์ข์ง ์์ ์ง์ญ์ ์ฌ์ฉ์๋ ์ผ์์ ์ธ ๋คํธ์ํฌ ์ค๋จ์ ๊ฒช๋ ์ฌ์ฉ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ธ๋๋ค์์์ ์ธ๋ด ์ง์ญ์ ์๋ ์ฌ์ฉ์๊ฐ ๋ด์ค ๊ธฐ์ฌ์ ์ ์ํ๋ ค๋ ๊ฒฝ์ฐ๋ฅผ ์์ํด๋ณด์ธ์. ์๋น์ค ์์ปค๊ฐ ์๋ค๋ฉด ์ธํฐ๋ท ์ฐ๊ฒฐ ์์ด๋ ์บ์๋ ๋ฒ์ ์ ์ฝ์ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํฅ์: ์๋น์ค ์์ปค๋ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ด๋ฏธ์ง์ ๊ฐ์ ์ ์ ์์ฐ์ ์บ์ฑํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ์๋ฒ์์ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ํ์์ฑ์ ์ค์ฌ์ฃผ์ด ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ๊ณ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ๋ฅผ ์๊ฐํด๋ณด์ธ์. ์๋น์ค ์์ปค๋ก ์ํ ์ด๋ฏธ์ง์ ์ค๋ช ์ ์บ์ฑํ๋ฉด ์ฌ๋ฌ ๊ตญ๊ฐ์ ๊ณ ๊ฐ๋ค์ ๋ก๋ฉ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
- ํธ์ ์๋ฆผ: ์๋น์ค ์์ปค๋ ํธ์ ์๋ฆผ์ ํ์ฑํํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ์ง ์์ ๋์๋ ๋ค์ ์ฐธ์ฌ๋ฅผ ์ ๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ค์ํ ์ ๋ฐ์ดํธ, ๊ฐ์ธํ๋ ์ถ์ฒ ๋๋ ํ๋ก๋ชจ์ ์ ์์ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์ด ํ์ต ์ฑ์ ์ผ๋ณธ์ ์๋ ์ฌ์ฉ์์๊ฒ ๋งค์ผ ์์ด๋ฅผ ์ฐ์ตํ๋ผ๊ณ ํธ์ ์๋ฆผ์ผ๋ก ์๊ธฐ์ํฌ ์ ์์ต๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ: ์๋น์ค ์์ปค๋ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๋ ๋ฉ๋ชจ ์ฑ๊ณผ ๊ฐ์ด ์๋ฒ์ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ ์ฉํฉ๋๋ค. ์ธ๋์ ์๊ณจ ์ง์ญ ์ฌ์ฉ์๊ฐ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ์ํฉ์ ์์ํด๋ณด์ธ์. ์ด ๋ฐ์ดํฐ๋ ๋์ค์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํด์ง๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ ๋๋ถ์ ํด๋ผ์ฐ๋์ ๋๊ธฐํ๋ ์ ์์ต๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ์คํ๋ผ์ธ ๊ธฐ๋ฅ, ํฅ์๋ ์ฑ๋ฅ, ํธ์ ์๋ฆผ์ ์ ๊ณตํจ์ผ๋ก์จ ์๋น์ค ์์ปค๋ ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์ฌํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ๋ง์กฑ๋ ์ฆ๊ฐ, ์ ํ์จ ์์น, ๋ธ๋๋ ์ถฉ์ฑ๋ ํฅ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ธ๋ผ์ง์ ์ฌ์ฉ์๊ฐ ์ถ๊ตฌ ๊ฒฝ๊ธฐ ์ค ๊ฐํ์ ์ธ ์ฐ๊ฒฐ ์ํ์์๋ ์ต์ ์ ์๊ฐ ํ์๋๋ ์คํฌ์ธ ์ฑ์ ์ ์ํ๋ ๊ฒ์ ์๊ฐํด๋ณด์ธ์.
์๋น์ค ์์ปค์ ์๋ ๋ฐฉ์: ๋จ๊ณ๋ณ ๊ฐ์ด๋
์๋น์ค ์์ปค๋ฅผ ๊ตฌํํ๋ ๋ฐ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
- ๋ฑ๋ก(Registration): ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๋ฉ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋น์ค ์์ปค๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋น์ค ์์ปค ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํ๋ผ๊ณ ์ง์ํฉ๋๋ค. ์ด ๋ฑ๋ก ๊ณผ์ ์ HTTPS ์ฌ์ฉ์ ์๊ตฌํฉ๋๋ค. ์ด๋ ์๋น์ค ์์ปค ์คํฌ๋ฆฝํธ๊ฐ ๋ณ์กฐ๋ก๋ถํฐ ๋ณดํธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์:
if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js') .then(function(registration) { console.log('Service Worker registered with scope:', registration.scope); }) .catch(function(error) { console.log('Service Worker registration failed:', error); }); }
- ์ค์น(Installation): ๋ฑ๋ก๋๋ฉด ์๋น์ค ์์ปค๋ ์ค์น ๋จ๊ณ์ ๋ค์ด๊ฐ๋๋ค. ์ด ๋จ๊ณ์์๋ ์ผ๋ฐ์ ์ผ๋ก HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ด๋ฏธ์ง์ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋ผ์ธ์์ ์๋ํ๋ ๋ฐ ํ์ํ ํ์ ์์ฐ์ ์บ์ํฉ๋๋ค. ์ด ๋จ๊ณ์์ ์๋น์ค ์์ปค๋ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ด์ ํ์ผ์ ๋ก์ปฌ๋ก ์ ์ฅํ๊ธฐ ์์ํฉ๋๋ค.
์์:
const cacheName = 'my-app-cache-v1'; const assetsToCache = [ '/', '/index.html', '/style.css', '/script.js', '/images/logo.png' ]; self.addEventListener('install', function(event) { event.waitUntil( caches.open(cacheName) .then(function(cache) { console.log('Opened cache'); return cache.addAll(assetsToCache); }) ); });
- ํ์ฑํ(Activation): ์ค์น ํ ์๋น์ค ์์ปค๋ ํ์ฑํ ๋จ๊ณ์ ๋ค์ด๊ฐ๋๋ค. ์ด ๋จ๊ณ์์๋ ์ค๋๋ ์บ์๋ฅผ ์ ๋ฆฌํ๊ณ ์๋น์ค ์์ปค๊ฐ ๋คํธ์ํฌ ์์ฒญ์ ์ฒ๋ฆฌํ ์ค๋น๋ฅผ ํ ์ ์์ต๋๋ค. ์ด ๋จ๊ณ๋ ์๋น์ค ์์ปค๊ฐ ๋คํธ์ํฌ ์์ฒญ์ ์ ๊ทน์ ์ผ๋ก ์ ์ดํ๊ณ ์บ์๋ ์์ฐ์ ์ ๊ณตํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์:
self.addEventListener('activate', function(event) { event.waitUntil( caches.keys().then(function(cacheNames) { return Promise.all( cacheNames.map(function(cacheName) { if (cacheName !== this.cacheName) { return caches.delete(cacheName); } }, self) ); }) ); });
- ๊ฐ๋ก์ฑ๊ธฐ(Interception): ์๋น์ค ์์ปค๋ `fetch` ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์บ์์์ ๊ฐ์ ธ์ฌ์ง ๋คํธ์ํฌ์์ ๊ฐ์ ธ์ฌ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์คํ๋ผ์ธ ์ฐ์ ์ ๋ต์ ํต์ฌ์ผ๋ก, ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ ์๋น์ค ์์ปค๊ฐ ์บ์๋ ์ฝํ
์ธ ๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ํด์ค๋๋ค.
์์:
self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request) .then(function(response) { // Cache hit - return response if (response) { return response; } // Not in cache - fetch from network return fetch(event.request); } ) ); });
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์บ์ฑ ์ ๋ต
์ฌ๋ฐ๋ฅธ ์บ์ฑ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋ฐ์ดํฐ์ ์ต์ ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์บ์ฑ ์ ๋ต์ ๋๋ค:
- ์บ์ ์ฐ์ (Cache First): ์ด ์ ๋ต์ ์บ์๋ฅผ ์ฐ์ ์ํฉ๋๋ค. ์๋น์ค ์์ปค๋ ๋จผ์ ๋ฆฌ์์ค๊ฐ ์บ์์ ์๋์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด ์บ์๋ ๋ฒ์ ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ ๋์ค์ ์ฌ์ฉํ ์ ์๋๋ก ์บ์ํฉ๋๋ค. ์ด๋ ๊ฑฐ์ ๋ณ๊ฒฝ๋์ง ์๋ ์ ์ ์์ฐ์ ์ด์์ ์ ๋๋ค. ์น์ฌ์ดํธ์ ๋ก๊ณ ๋ ํ๋น์ฝ์ ์บ์ฑํ๋ ๊ฒ์ด ์ข์ ์์ ๋๋ค.
- ๋คํธ์ํฌ ์ฐ์ (Network First): ์ด ์ ๋ต์ ๋คํธ์ํฌ๋ฅผ ์ฐ์ ์ํฉ๋๋ค. ์๋น์ค ์์ปค๋ ๋จผ์ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํฉ๋๋ค. ๋คํธ์ํฌ ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๊ณ ์บ์ํฉ๋๋ค. ๋คํธ์ํฌ ์์ฒญ์ด ์คํจํ๋ฉด(์: ์คํ๋ผ์ธ ๋ชจ๋), ์บ์๋ ๋ฒ์ ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๊ฐ๋ฅํ ํ ์ต์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๋์ ์ฝํ ์ธ ์ ์ ํฉํฉ๋๋ค. ๊ธ๋ก๋ฒ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ์จ์ ๊ฒ์ํ๋ ๊ฒ์ ์๊ฐํด๋ณด์ธ์.
- ์บ์ ํ ๋คํธ์ํฌ(Cache Then Network): ์ด ์ ๋ต์ ์บ์๋ ๋ฒ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฆ์ ๋ฐํํ ๋ค์, ๋คํธ์ํฌ์ ์ต์ ๋ฒ์ ์ผ๋ก ์บ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ ๋น ๋ฅธ ์ด๊ธฐ ๋ก๋๋ฅผ ์ ๊ณตํ๊ณ ์ฌ์ฉ์๊ฐ ํญ์ ๊ฐ์ฅ ์ต์ ์ฝํ ์ธ ๋ฅผ ๊ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ ๋ชฉ๋ก์ ํ์ํ ๋ ์ ์๋ํ๋ฉฐ, ๋จผ์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ํ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- Stale-While-Revalidate: ์บ์ ํ ๋คํธ์ํฌ์ ์ ์ฌํ๊ฒ, ์ด ์ ๋ต์ ์บ์๋ ๋ฒ์ ์ ์ฆ์ ๋ฐํํ๋ฉด์ ๋์์ ๋คํธ์ํฌ ์๋ต์ผ๋ก ์บ์๋ฅผ ์ฌ๊ฒ์ฆํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๊ณ ์ต์ข ์ ์ธ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ด์ค ํผ๋์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฒฝํ๋ฉฐ, ์บ์๋ ๋ฒ์ ์ ์ฆ์ ํ์ํ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ๊ธฐ์ฌ๋ก ํผ๋๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋คํธ์ํฌ ์ ์ฉ(Network Only): ์ด ์ ๋ต์์ ์๋น์ค ์์ปค๋ ํญ์ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํฉ๋๋ค. ๋คํธ์ํฌ ์์ฒญ์ด ์คํจํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ด๋ ํญ์ ์ต์ ์ํ์ฌ์ผ ํ๊ณ ์บ์์์ ์ ๊ณต๋ ์ ์๋ ๋ฆฌ์์ค์ ์ ํฉํฉ๋๋ค. ๋งค์ฐ ์์ ํ ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ค์๊ฐ ์ฃผ๊ฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด ์์ ๋๋ค.
์คํ๋ผ์ธ ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์์
๋ค์์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ผ์ธ ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค์ ์์์ ๋๋ค:
- ๋ด์ค ์ฑ: ๋ด์ค ์ฑ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์ฌ์ ์ด๋ฏธ์ง๋ฅผ ์บ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ์ต์ ๋ด์ค๋ฅผ ์ฝ์ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ์ธํฐ๋ท ์ ์์ด ๋ถ์์ ํ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ์ ์ฉํฉ๋๋ค. ๋์ด์ง๋ฆฌ์์์ ์ฌ์ฉ๋๋ ๋ด์ค ์ฑ์ด ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ์ํฅ์ ๋ฏธ์น๋ ์ ์ ์ ๊ฒช๊ณ ์์ ๋์๋ ๋ค์ด๋ก๋ํ ๊ธฐ์ฌ๋ฅผ ์ฝ์ ์ ์๊ฒ ํ๋ ๊ฒ์ ์์ํด๋ณด์ธ์.
- ์ ์์๊ฑฐ๋ ์ฑ: ์ ์์๊ฑฐ๋ ์ฑ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ์ ๋ณด์ ์ด๋ฏธ์ง๋ฅผ ์บ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ์ํ์ ํ์ํ๊ณ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ์ ํ์จ์ ๋์ผ ์ ์์ต๋๋ค. ๋ ์ผ์ ๊ณ ๊ฐ์ด ์ถํด๊ทผ๊ธธ์ ์ํ์ ์ผํํ ๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ์บ์๋ ์ํ ์ ๋ณด๋ฅผ ํ์ํ๊ณ ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ์ถ๊ฐํ ์ ์๊ฒ ํ๋ฉฐ, ์ด๋ ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋ ๋ ๋๊ธฐํ๋ฉ๋๋ค.
- ์ฌํ ์ฑ: ์ฌํ ์ฑ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์ง๋, ์ฌ์ , ์์ฝ ์ ๋ณด๋ฅผ ์บ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท ์ ์์ด ์ ํ๋ ์ง์ญ์ ์ฌํํ ๋์๋ ์ด ์ ๋ณด์ ์ ๊ทผํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ผ๋ณธ์ ์ฌํ์๋ ๋ก๋ฐ์ด๋ ํ์ง SIM์ ์ ์ํ ์ ์์ ๋์๋ ์ง๋์ ์ฌ์ ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
- ๊ต์ก์ฉ ์ฑ: ๊ต์ก์ฉ ์ฑ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ํ์ต ์๋ฃ๋ฅผ ์บ์ํ์ฌ ํ์๋ค์ด ์คํ๋ผ์ธ์ผ ๋์๋ ํ์ต์ ๊ณ์ํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ์ธ๋ด ์ง์ญ์ ํ์์ด๋ ์ธํฐ๋ท ์ ๊ทผ์ด ์ ํ๋ ํ์๋ค์๊ฒ ์ ์ตํฉ๋๋ค. ์ผ๋์ ์๊ณจ ํ๊ต ํ์๋ค์ ์ผ๊ด๋ ์ธํฐ๋ท ์ฐ๊ฒฐ ์์ด๋ ์บ์๋ ์ฝํ ์ธ ๊ฐ ์๋ ๊ต์ก์ฉ ์ฑ์ ์ฌ์ฉํ์ฌ ํ์ต์ ๊ณ์ํ ์ ์์ต๋๋ค.
- ์์ฐ์ฑ ์ฑ: ๋ฉ๋ชจ ์ฑ, ์์ ๊ด๋ฆฌ์, ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๋ ์๋น์ค ์์ปค๋ฅผ ํ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ์ฌ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋์๋ ์ฝํ ์ธ ๋ฅผ ์์ฑํ๊ณ ํธ์งํ ์ ์๋๋ก ํฉ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋ณต์๋๋ฉด ์๋์ผ๋ก ๋๊ธฐํ๋ฉ๋๋ค. ๋นํ๊ธฐ์์ ํ ์ผ ๋ชฉ๋ก์ ๋ง๋ค๊ฑฐ๋ ์ด๋ฉ์ผ์ ์์ฑํ๋ ์ฌ์ฉ์๋ ๋นํ๊ธฐ๊ฐ ์ฐฉ๋ฅํ๊ณ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก ์ ์ฅ๋๊ณ ๋๊ธฐํ๋ ์ ์์ต๋๋ค.
์๋น์ค ์์ปค ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์๋น์ค ์์ปค๋ฅผ ๊ตฌํํ ๋ ์ผ๋์ ๋์ด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- HTTPS ์ฌ์ฉ: ์๋น์ค ์์ปค๋ HTTPS๋ฅผ ํตํด ์ ๊ณต๋๋ ์น์ฌ์ดํธ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์๋น์ค ์์ปค ์คํฌ๋ฆฝํธ๊ฐ ๋ณ์กฐ๋ก๋ถํฐ ๋ณดํธ๋๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ํ๋ ๋ณด์ ์๊ตฌ ์ฌํญ์ ๋๋ค.
- ๋จ์ํ๊ฒ ์ ์ง: ์๋น์ค ์์ปค ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฅํ ํ ๋จ์ํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ์ธ์. ๋ณต์กํ ์๋น์ค ์์ปค๋ ๋๋ฒ๊น ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์๋น์ค ์์ปค ๋ด์์ ๋ถํ์ํ๊ฒ ๋ณต์กํ ๋ก์ง์ ํผํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธ: ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ์๋น์ค ์์ปค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธํ์ธ์. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ผ์ธ ์ํ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์บ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฌํ์ธ์. ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ์ ๊ฑธ์น ์ฒ ์ ํ ํ ์คํธ๊ฐ ์ค์ํฉ๋๋ค.
- ์ฐ์ํ ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ: ์๋น์ค ์์ปค ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ๋ต์ ๊ตฌํํ์ธ์. ์ด๋ ์ฌ์ฉ์๊ฐ ์ค๋จ ์์ด ํญ์ ์ต์ ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ข์ ์ ๋ต์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๋ฐ์ดํธ๋ ๋ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋ ๊ฒ์ ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ๊ณ ๋ ค: ์คํ๋ผ์ธ ๊ฒฝํ์ ์ ์คํ๊ฒ ์ค๊ณํ์ธ์. ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋ ์ ์ตํ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ณ ์คํ๋ผ์ธ์์ ์ฌ์ฉํ ์ ์๋ ์ฝํ ์ธ ๋ฅผ ๋ช ํํ๊ฒ ํ์ํ์ธ์. ์คํ๋ผ์ธ ์ํ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์์ด์ฝ์ด๋ ๋ฐฐ๋์ ๊ฐ์ ์๊ฐ์ ์ ํธ๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์: ์๋น์ค ์์ปค์ ์ฑ๋ฅ์ ์ถ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์์ ๊ตฌํํ์ธ์. Google Analytics๋ Sentry์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ํต์ฐฐ๋ ฅ์ ์์งํ์ธ์. ์ด๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์๋น์ค ์์ปค๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ณผ์ ์ ํด๊ฒฐ์ฑ
์๋น์ค ์์ปค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ช ๊ฐ์ง ์ด๋ ค์์ ์ผ๊ธฐํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๊ทธ ํด๊ฒฐ์ฑ ์ ๋๋ค:
- ์บ์ ๋ฌดํจํ: ์ธ์ ์บ์๋ฅผ ๋ฌดํจํํ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ์ฝํ ์ธ ๋ฅผ ๋๋ฌด ์ค๋ ์บ์ํ๋ฉด ์ฌ์ฉ์๋ ์ค๋๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์บ์๋ฅผ ๋๋ฌด ์์ฃผ ๋ฌดํจํํ๋ฉด ์บ์ฑ์ ์ฑ๋ฅ ์ด์ ์ ์์ํ ์ ์์ต๋๋ค. ๊ฒฌ๊ณ ํ ์บ์ ๋ฒ์ ๊ด๋ฆฌ ์ ๋ต์ ๊ตฌํํ๊ณ ์บ์ ๋ฒ์คํ ๊ธฐ์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
- ๋๋ฒ๊น : ์๋น์ค ์์ปค๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์์ปค์ ์ฝ์ ์ถ๋ ฅ๊ณผ ๋คํธ์ํฌ ์์ฒญ์ ๊ฒ์ฌํ์ธ์. ์๋น์ค ์์ปค์ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ์ ๋ก๊น ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ์ธ์. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋ก๊น ์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ์ธ์.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ์๋น์ค ์์ปค๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๋๋ฆฌ ์ง์๋์ง๋ง ์ผ๋ถ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ์ง์ํ์ง ์์ ์ ์์ต๋๋ค. ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์์๊ฒ๋ ๋์ฒด ๊ฒฝํ์ ์ ๊ณตํ์ธ์. ์ ์ง์ ํฅ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์์๊ฒ๋ ๊ธฐ๋ณธ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ์๋น์ค ์์ปค๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ์ ๋ฐ์ดํธ ๋ณต์ก์ฑ: ์๋น์ค ์์ปค ์ ๋ฐ์ดํธ๋ ๊น๋ค๋ก์ธ ์ ์์ผ๋ฉฐ, ์ ๋๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ค๋๋ ์บ์ ์ฝํ ์ธ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์บ์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊นจ๋ํ ์ ๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฅํ๊ณ ์ค๋๋ ๋ฐ์ดํฐ ์ ๊ณต์ ํผํ์ธ์. ๋ํ ์ฌ์ฉ์์๊ฒ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์๊ฐ์ ์ ํธ๋ฅผ ์ ๊ณตํ์ธ์.
์๋น์ค ์์ปค์ ๋ฏธ๋
์๋น์ค ์์ปค๋ ๋์์์ด ๋ฐ์ ํ๋ ๊ธฐ์ ์ ๋๋ค. ๋ฏธ๋์๋ ๋ค์๊ณผ ๊ฐ์ ๋์ฑ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๊ณผ ๋ฅ๋ ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค:
- ๋ ๋ฐ์ ๋ ์บ์ฑ ์ ๋ต: ๊ฐ๋ฐ์๋ค์ ๋ ์ ๊ตํ ์บ์ฑ ์ ๋ต์ ์ ๊ทผํ ์ ์๊ฒ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์บ์ฑ ๋์์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ ๋ฐ์ ๋ ์บ์ฑ ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ฐํ๋ ๊ฒ์ ๋๋ค.
- ํฅ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ: ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๋ ๋ ์์ ์ ์ด๊ณ ํจ์จ์ ์ด ๋์ด ๊ฐ๋ฐ์๋ค์ด ๋ ํฐ ํ์ ์ ๊ฐ์ง๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ์ ์ ๋ขฐ์ฑ๊ณผ ํจ์จ์ฑ์ด ํฌ๊ฒ ํฅ์๋ ๊ฒ์ ๋๋ค.
- ๋ค๋ฅธ ์น ๊ธฐ์ ๊ณผ์ ํตํฉ: ์๋น์ค ์์ปค๋ WebAssembly ๋ฐ Web Components์ ๊ฐ์ ๋ค๋ฅธ ์น ๊ธฐ์ ๊ณผ ๋ ๊ธด๋ฐํ๊ฒ ํตํฉ๋์ด ๊ฐ๋ฐ์๋ค์ด ๋์ฑ ๊ฐ๋ ฅํ๊ณ ๋งค๋ ฅ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ API์์ ์ํํ ํตํฉ์ ๋ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค.
- ํธ์ ์๋ฆผ์ ์ํ ํ์คํ๋ API: ํ์คํ๋ API๋ ํธ์ ์๋ฆผ์ ๋ณด๋ด๋ ๊ณผ์ ์ ๋จ์ํํ์ฌ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉ์๋ฅผ ๋ค์ ์ฐธ์ฌ์ํค๋ ๊ฒ์ ๋ ์ฝ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค. ์ฌ์ฉํ๊ธฐ ์ฌ์ด ํธ์ ์๋ฆผ API๋ ๊ฐ๋ฐ์๋ค์ด ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ์๋น์ค ์์ปค๋ก ์คํ๋ผ์ธ ์ฐ์ ์ ์์ฉํ์ธ์
์๋น์ค ์์ปค๋ ์น ๊ฐ๋ฐ์ ํ๋๋ฅผ ๋ฐ๊พธ๋ ๊ธฐ์ ์ ๋๋ค. ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ณ , ์ฑ๋ฅ์ ๊ฐ์ ํ๋ฉฐ, ํธ์ ์๋ฆผ์ ์ ๊ณตํจ์ผ๋ก์จ ๋ ํ๋ ฅ ์๊ณ , ๋งค๋ ฅ์ ์ด๋ฉฐ, ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๊ฒ ํด์ค๋๋ค.
์ธ์์ด ์ ์ ๋ ๋ชจ๋ฐ์ผํ๋๊ณ ์ํธ ์ฐ๊ฒฐ๋จ์ ๋ฐ๋ผ ์คํ๋ผ์ธ ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ํ์์ฑ์ ๊ณ์ํด์ ์ปค์ง ๊ฒ์ ๋๋ค. ์๋น์ค ์์ปค๋ฅผ ์์ฉํจ์ผ๋ก์จ, ๋น์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ์ ๊ด๊ณ์์ด ์ ์ธ๊ณ ์ฌ์ฉ์๋ค์ด ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ค๋ ๋ฐ๋ก ์๋น์ค ์์ปค ํ์์ ์์ํ๊ณ ์คํ๋ผ์ธ ์ฐ์ ๊ฐ๋ฐ์ ํ์ ๋ฐํํด๋ณด์ธ์!
์ถ๊ฐ ํ์ต ๋ฐ ๋ฆฌ์์ค
- Google Developers - ์๋น์ค ์์ปค: ์๊ฐ: https://developers.google.com/web/fundamentals/primers/service-workers
- Mozilla Developer Network (MDN) - Service Worker API: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
- ServiceWorker Cookbook: https://serviceworke.rs/
- Is ServiceWorker Ready?: https://jakearchibald.github.io/isserviceworkerready/